package com.zx._01_基础._010_util;

import org.junit.Test;

public class MathTest {

    //Math基础使用
    @Test
    public void test1() {
        // 1.三角函数
        Math.toDegrees(1.57);//将弧度转换角度
        Math.toRadians(90);//将角度转换为弧度

        Math.acos(1.2);//计算反余弦，返回的角度范围在 0.0 到 pi 之间
        Math.asin(0.8);//计算反正弦；返回的角度范围在 -pi/2 到 pi/2 之间。
        Math.atan(2.3);//计算反正切；返回的角度范围在 -pi/2 到 pi/2 之间。
        Math.cos(1.57);//计算三角余弦。
        Math.cosh(1.2);//计算值的双曲余弦。
        Math.sin(1.57);//计算正弦
        Math.sinh(1.2);//计算双曲正弦
        Math.tan(0.8);//计算三角正切
        Math.tanh(2.1);//计算双曲正切
        Math.atan2(0.1, 0.2);//将矩形坐标 (x, y) 转换成极坐标 (r, thet));//

        // 2.数字精度
        Math.floor(-1.2);//取整，返回小于目标数的最大整数。
        Math.ceil(1.2);//取整，返回大于目标数的最小整数。
        Math.round(2.3);//四舍五入取整

        // 3.数学运算
        Math.sqrt(2.3);//计算平方根。
        Math.cbrt(9);//计算立方根。
        Math.exp(2);//返回欧拉数 e 的n次幂。
        Math.hypot(4, 4);//返回 sqrt(x2 +y2)
        Math.IEEEremainder(5, 2);//按照 IEEE 754 标准的规定，对两个参数进行余数运算。
        Math.pow(3, 2);//计算乘方
        Math.log(12);//计算自然对数
        Math.log10(9);//计算底数为 10 的对数。
        Math.log1p(9);//返回参数与 1 之和的自然对数。
        Math.abs(-4.5);//计算绝对值。

        // 4.数字比较
        Math.copySign(1.2, -1.0);//符号赋值，返回带有第二个浮点数符号的第一个浮点参数。
        Math.signum(2.3);//	符号函数；如果参数为 0，则返回 0；如果参数大于 0，则返回 1.0；如果参数小于 0，则返回 -1.0。
        Math.max(2.3, 4.5);//找出最大值
        Math.min(1.2, 3.4);//计算最小值
        Math.nextAfter(1.2, 1.0);//返回第一个参数和第二个参数之间与第一个参数相邻的浮点数。

        // 5.获取数字
        Math.nextUp(1.2);//返回比目标数略大的浮点数
        Math.random();//	返回一个伪随机数，该值大于等于 0.0 且小于 1.0。
    }

    //Java整数相加溢出
    @Test
    public void test2() {
        // 数据溢出，变成-2
        int a = Integer.MAX_VALUE + Integer.MAX_VALUE;
        System.out.println(a);
        // 抛出异常
        int addExact = Math.addExact(Integer.MAX_VALUE, Integer.MAX_VALUE);
        System.out.println(addExact);
    }

}
